/*
Copyright 2016 The Rook Authors. All rights reserved.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

	http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package object

import (
	"fmt"
	"path"

	"github.com/pkg/errors"
	"github.com/rook/rook/pkg/operator/k8sutil"
	v1 "k8s.io/api/core/v1"
	kerrors "k8s.io/apimachinery/pkg/api/errors"
)

const (
	// these control the location where the mime.types file is mounted in containers.
	// Ceph's default is /etc/mime.types, but we can't mount a configmap to `/etc` without breaking
	// the container. /etc/ceph/rgw won't overwrite ceph.conf (if it exists), and it will be easy to
	// find manually by inspection of the `/etc/ceph` dir.
	mimeTypesMountDir = "/etc/ceph/rgw"
	mimeTypesFileName = "mime.types"
)

func (c *clusterConfig) mimeTypesConfigMapName() string {
	return fmt.Sprintf("%s-mime-types", instanceName(c.store.Name))
}

func mimeTypesMountPath() string {
	return path.Join(mimeTypesMountDir, mimeTypesFileName)
}

// store mime.types file in a config map
func (c *clusterConfig) generateMimeTypes() error {
	k := k8sutil.NewConfigMapKVStore(c.store.Namespace, c.context.Clientset, c.ownerInfo)
	if _, err := k.GetValue(c.clusterInfo.Context, c.mimeTypesConfigMapName(), mimeTypesFileName); err == nil || !kerrors.IsNotFound(err) {
		logger.Infof("config map %q for object store %q already exists, not overwriting", c.mimeTypesConfigMapName(), c.store.Name)
		return nil
	}
	// is not found
	if err := k.SetValue(c.clusterInfo.Context, c.mimeTypesConfigMapName(), mimeTypesFileName, mimeTypes); err != nil {
		return errors.Wrapf(err, "failed to create config map for object store %q", c.store.Name)
	}
	return nil
}

func (c *clusterConfig) mimeTypesVolume() v1.Volume {
	return v1.Volume{
		Name: c.mimeTypesConfigMapName(),
		VolumeSource: v1.VolumeSource{
			ConfigMap: &v1.ConfigMapVolumeSource{LocalObjectReference: v1.LocalObjectReference{
				Name: c.mimeTypesConfigMapName(),
			}}}}
}

func (c *clusterConfig) mimeTypesVolumeMount() v1.VolumeMount {
	return v1.VolumeMount{
		Name:      c.mimeTypesConfigMapName(),
		MountPath: mimeTypesMountDir,
		ReadOnly:  true,
		// read-only so malicious actors can't edit, which could allow them to add file type
		// execution vulnerabilities that an admin has taken care to eliminate
	}
}

const mimeTypes = `
application/activemessage
application/andrew-inset			ez
application/annodex				anx
application/applefile
application/atom+xml				atom
application/atomcat+xml				atomcat
application/atomicmail
application/atomserv+xml			atomsrv
application/batch-SMTP
application/bbolin				lin
application/beep+xml
application/cals-1840
application/commonground
application/cu-seeme				cu
application/cybercash
application/davmount+xml			davmount
application/dca-rft
application/dec-dx
application/dicom				dcm
application/docbook+xml
application/dsptype				tsp
application/dvcs
application/ecmascript				es
application/edi-consent
application/edi-x12
application/edifact
application/eshop
application/font-sfnt				otf ttf
application/font-tdpfr				pfr
application/font-woff				woff
application/futuresplash			spl
application/ghostview
application/gzip				gz
application/hta					hta
application/http
application/hyperstudio
application/iges
application/index
application/index.cmd
application/index.obj
application/index.response
application/index.vnd
application/iotp
application/ipp
application/isup
application/java-archive			jar
application/java-serialized-object		ser
application/java-vm				class
application/javascript				js
application/json				json
application/m3g					m3g
application/mac-binhex40			hqx
application/mac-compactpro			cpt
application/macwriteii
application/marc
application/mathematica				nb nbp
application/mbox				mbox
application/ms-tnef
application/msaccess				mdb
application/msword				doc dot
application/mxf					mxf
application/news-message-id
application/news-transmission
application/ocsp-request
application/ocsp-response
application/octet-stream			bin deploy msu msp
application/oda					oda
application/oebps-package+xml			opf
application/ogg					ogx
application/onenote				one onetoc2 onetmp onepkg
application/parityfec
application/pdf					pdf
application/pgp-encrypted			pgp
application/pgp-keys				key
application/pgp-signature			sig
application/pics-rules				prf
application/pkcs10
application/pkcs7-mime
application/pkcs7-signature
application/pkix-cert
application/pkix-crl
application/pkixcmp
application/postscript				ps ai eps epsi epsf eps2 eps3
application/prs.alvestrand.titrax-sheet
application/prs.cww
application/prs.nprend
application/qsig
application/rar					rar
application/rdf+xml				rdf
application/remote-printing
application/riscos
application/rtf					rtf
application/sdp
application/set-payment
application/set-payment-initiation
application/set-registration
application/set-registration-initiation
application/sgml
application/sgml-open-catalog
application/sieve
application/sla					stl
application/slate
application/smil+xml				smi smil
application/timestamp-query
application/timestamp-reply
application/vemmi
application/whoispp-query
application/whoispp-response
application/wita
application/x400-bp
application/xhtml+xml				xhtml xht
application/xml					xml xsd
application/xml-dtd
application/xml-external-parsed-entity
application/xslt+xml				xsl xslt
application/xspf+xml				xspf
application/zip					zip
application/vnd.3M.Post-it-Notes
application/vnd.accpac.simply.aso
application/vnd.accpac.simply.imp
application/vnd.acucobol
application/vnd.aether.imp
application/vnd.android.package-archive						apk
application/vnd.anser-web-certificate-issue-initiation
application/vnd.anser-web-funds-transfer-initiation
application/vnd.audiograph
application/vnd.bmi
application/vnd.businessobjects
application/vnd.canon-cpdl
application/vnd.canon-lips
application/vnd.cinderella							cdy
application/vnd.claymore
application/vnd.commerce-battelle
application/vnd.commonspace
application/vnd.comsocaller
application/vnd.contact.cmsg
application/vnd.cosmocaller
application/vnd.ctc-posml
application/vnd.cups-postscript
application/vnd.cups-raster
application/vnd.cups-raw
application/vnd.cybank
application/vnd.debian.binary-package						deb ddeb udeb
application/vnd.dna
application/vnd.dpgraph
application/vnd.dxr
application/vnd.ecdis-update
application/vnd.ecowin.chart
application/vnd.ecowin.filerequest
application/vnd.ecowin.fileupdate
application/vnd.ecowin.series
application/vnd.ecowin.seriesrequest
application/vnd.ecowin.seriesupdate
application/vnd.enliven
application/vnd.epson.esf
application/vnd.epson.msf
application/vnd.epson.quickanime
application/vnd.epson.salt
application/vnd.epson.ssf
application/vnd.ericsson.quickcall
application/vnd.eudora.data
application/vnd.fdf
application/vnd.ffsns
application/vnd.flographit
application/vnd.font-fontforge-sfd						sfd
application/vnd.framemaker
application/vnd.fsc.weblaunch
application/vnd.fujitsu.oasys
application/vnd.fujitsu.oasys2
application/vnd.fujitsu.oasys3
application/vnd.fujitsu.oasysgp
application/vnd.fujitsu.oasysprs
application/vnd.fujixerox.ddd
application/vnd.fujixerox.docuworks
application/vnd.fujixerox.docuworks.binder
application/vnd.fut-misnet
application/vnd.google-earth.kml+xml						kml
application/vnd.google-earth.kmz						kmz
application/vnd.grafeq
application/vnd.groove-account
application/vnd.groove-identity-message
application/vnd.groove-injector
application/vnd.groove-tool-message
application/vnd.groove-tool-template
application/vnd.groove-vcard
application/vnd.hhe.lesson-player
application/vnd.hp-HPGL
application/vnd.hp-PCL
application/vnd.hp-PCLXL
application/vnd.hp-hpid
application/vnd.hp-hps
application/vnd.httphone
application/vnd.hzn-3d-crossword
application/vnd.ibm.MiniPay
application/vnd.ibm.afplinedata
application/vnd.ibm.modcap
application/vnd.informix-visionary
application/vnd.intercon.formnet
application/vnd.intertrust.digibox
application/vnd.intertrust.nncp
application/vnd.intu.qbo
application/vnd.intu.qfx
application/vnd.irepository.package+xml
application/vnd.is-xpr
application/vnd.japannet-directory-service
application/vnd.japannet-jpnstore-wakeup
application/vnd.japannet-payment-wakeup
application/vnd.japannet-registration
application/vnd.japannet-registration-wakeup
application/vnd.japannet-setstore-wakeup
application/vnd.japannet-verification
application/vnd.japannet-verification-wakeup
application/vnd.koan
application/vnd.lotus-1-2-3
application/vnd.lotus-approach
application/vnd.lotus-freelance
application/vnd.lotus-notes
application/vnd.lotus-organizer
application/vnd.lotus-screencam
application/vnd.lotus-wordpro
application/vnd.mcd
application/vnd.mediastation.cdkey
application/vnd.meridian-slingshot
application/vnd.mif
application/vnd.minisoft-hp3000-save
application/vnd.mitsubishi.misty-guard.trustweb
application/vnd.mobius.daf
application/vnd.mobius.dis
application/vnd.mobius.msl
application/vnd.mobius.plc
application/vnd.mobius.txf
application/vnd.motorola.flexsuite
application/vnd.motorola.flexsuite.adsi
application/vnd.motorola.flexsuite.fis
application/vnd.motorola.flexsuite.gotap
application/vnd.motorola.flexsuite.kmr
application/vnd.motorola.flexsuite.ttc
application/vnd.motorola.flexsuite.wem
application/vnd.mozilla.xul+xml							xul
application/vnd.ms-artgalry
application/vnd.ms-asf
application/vnd.ms-excel							xls xlb xlt
application/vnd.ms-excel.addin.macroEnabled.12					xlam
application/vnd.ms-excel.sheet.binary.macroEnabled.12				xlsb
application/vnd.ms-excel.sheet.macroEnabled.12					xlsm
application/vnd.ms-excel.template.macroEnabled.12				xltm
application/vnd.ms-fontobject							eot
application/vnd.ms-lrm
application/vnd.ms-officetheme							thmx
application/vnd.ms-pki.seccat							cat
#application/vnd.ms-pki.stl							stl
application/vnd.ms-powerpoint							ppt pps
application/vnd.ms-powerpoint.addin.macroEnabled.12				ppam
application/vnd.ms-powerpoint.presentation.macroEnabled.12			pptm
application/vnd.ms-powerpoint.slide.macroEnabled.12				sldm
application/vnd.ms-powerpoint.slideshow.macroEnabled.12				ppsm
application/vnd.ms-powerpoint.template.macroEnabled.12				potm
application/vnd.ms-project
application/vnd.ms-tnef
application/vnd.ms-word.document.macroEnabled.12				docm
application/vnd.ms-word.template.macroEnabled.12				dotm
application/vnd.ms-works
application/vnd.mseq
application/vnd.msign
application/vnd.music-niff
application/vnd.musician
application/vnd.netfpx
application/vnd.noblenet-directory
application/vnd.noblenet-sealer
application/vnd.noblenet-web
application/vnd.novadigm.EDM
application/vnd.novadigm.EDX
application/vnd.novadigm.EXT
application/vnd.oasis.opendocument.chart					odc
application/vnd.oasis.opendocument.database					odb
application/vnd.oasis.opendocument.formula					odf
application/vnd.oasis.opendocument.graphics					odg
application/vnd.oasis.opendocument.graphics-template				otg
application/vnd.oasis.opendocument.image					odi
application/vnd.oasis.opendocument.presentation					odp
application/vnd.oasis.opendocument.presentation-template			otp
application/vnd.oasis.opendocument.spreadsheet					ods
application/vnd.oasis.opendocument.spreadsheet-template				ots
application/vnd.oasis.opendocument.text						odt
application/vnd.oasis.opendocument.text-master					odm
application/vnd.oasis.opendocument.text-template				ott
application/vnd.oasis.opendocument.text-web					oth
application/vnd.openxmlformats-officedocument.presentationml.presentation	pptx
application/vnd.openxmlformats-officedocument.presentationml.slide		sldx
application/vnd.openxmlformats-officedocument.presentationml.slideshow		ppsx
application/vnd.openxmlformats-officedocument.presentationml.template		potx
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet		xlsx
application/vnd.openxmlformats-officedocument.spreadsheetml.template		xltx
application/vnd.openxmlformats-officedocument.wordprocessingml.document		docx
application/vnd.openxmlformats-officedocument.wordprocessingml.template		dotx
application/vnd.osa.netdeploy
application/vnd.palm
application/vnd.pg.format
application/vnd.pg.osasli
application/vnd.powerbuilder6
application/vnd.powerbuilder6-s
application/vnd.powerbuilder7
application/vnd.powerbuilder7-s
application/vnd.powerbuilder75
application/vnd.powerbuilder75-s
application/vnd.previewsystems.box
application/vnd.publishare-delta-tree
application/vnd.pvi.ptid1
application/vnd.pwg-xhtml-print+xml
application/vnd.rapid
application/vnd.rim.cod								cod
application/vnd.s3sms
application/vnd.seemail
application/vnd.shana.informed.formdata
application/vnd.shana.informed.formtemplate
application/vnd.shana.informed.interchange
application/vnd.shana.informed.package
application/vnd.smaf								mmf
application/vnd.sss-cod
application/vnd.sss-dtf
application/vnd.sss-ntf
application/vnd.stardivision.calc						sdc
application/vnd.stardivision.chart						sds
application/vnd.stardivision.draw						sda
application/vnd.stardivision.impress						sdd
application/vnd.stardivision.math						sdf
application/vnd.stardivision.writer						sdw
application/vnd.stardivision.writer-global					sgl
application/vnd.street-stream
application/vnd.sun.xml.calc							sxc
application/vnd.sun.xml.calc.template						stc
application/vnd.sun.xml.draw							sxd
application/vnd.sun.xml.draw.template						std
application/vnd.sun.xml.impress							sxi
application/vnd.sun.xml.impress.template					sti
application/vnd.sun.xml.math							sxm
application/vnd.sun.xml.writer							sxw
application/vnd.sun.xml.writer.global						sxg
application/vnd.sun.xml.writer.template						stw
application/vnd.svd
application/vnd.swiftview-ics
application/vnd.symbian.install							sis
application/vnd.tcpdump.pcap							cap pcap
application/vnd.triscape.mxs
application/vnd.trueapp
application/vnd.truedoc
application/vnd.tve-trigger
application/vnd.ufdl
application/vnd.uplanet.alert
application/vnd.uplanet.alert-wbxml
application/vnd.uplanet.bearer-choice
application/vnd.uplanet.bearer-choice-wbxml
application/vnd.uplanet.cacheop
application/vnd.uplanet.cacheop-wbxml
application/vnd.uplanet.channel
application/vnd.uplanet.channel-wbxml
application/vnd.uplanet.list
application/vnd.uplanet.list-wbxml
application/vnd.uplanet.listcmd
application/vnd.uplanet.listcmd-wbxml
application/vnd.uplanet.signal
application/vnd.vcx
application/vnd.vectorworks
application/vnd.vidsoft.vidconference
application/vnd.visio								vsd vst vsw vss
application/vnd.vividence.scriptfile
application/vnd.wap.sic
application/vnd.wap.slc
application/vnd.wap.wbxml							wbxml
application/vnd.wap.wmlc							wmlc
application/vnd.wap.wmlscriptc							wmlsc
application/vnd.webturbo
application/vnd.wordperfect							wpd
application/vnd.wordperfect5.1							wp5
application/vnd.wrq-hp3000-labelled
application/vnd.wt.stf
application/vnd.xara
application/vnd.xfdl
application/vnd.yellowriver-custom-menu
application/zlib
application/x-123				wk
application/x-7z-compressed			7z
application/x-abiword				abw
application/x-apple-diskimage			dmg
application/x-bcpio				bcpio
application/x-bittorrent			torrent
application/x-cab				cab
application/x-cbr				cbr
application/x-cbz				cbz
application/x-cdf				cdf cda
application/x-cdlink				vcd
application/x-chess-pgn				pgn
application/x-comsol				mph
application/x-core
application/x-cpio				cpio
application/x-csh				csh
application/x-debian-package			deb udeb
application/x-director				dcr dir dxr
application/x-dms				dms
application/x-doom				wad
application/x-dvi				dvi
application/x-executable
application/x-font				pfa pfb gsf
application/x-font-pcf				pcf pcf.Z
application/x-freemind				mm
application/x-futuresplash			spl
application/x-ganttproject			gan
application/x-gnumeric				gnumeric
application/x-go-sgf				sgf
application/x-graphing-calculator		gcf
application/x-gtar				gtar
application/x-gtar-compressed			tgz taz
application/x-hdf				hdf
#application/x-httpd-eruby			rhtml
#application/x-httpd-php			phtml pht php
#application/x-httpd-php-source			phps
#application/x-httpd-php3			php3
#application/x-httpd-php3-preprocessed		php3p
#application/x-httpd-php4			php4
#application/x-httpd-php5			php5
application/x-hwp				hwp
application/x-ica				ica
application/x-info				info
application/x-internet-signup			ins isp
application/x-iphone				iii
application/x-iso9660-image			iso
application/x-jam				jam
application/x-java-applet
application/x-java-bean
application/x-java-jnlp-file			jnlp
application/x-jmol				jmz
application/x-kchart				chrt
application/x-kdelnk
application/x-killustrator			kil
application/x-koan				skp skd skt skm
application/x-kpresenter			kpr kpt
application/x-kspread				ksp
application/x-kword				kwd kwt
application/x-latex				latex
application/x-lha				lha
application/x-lyx				lyx
application/x-lzh				lzh
application/x-lzx				lzx
application/x-maker				frm maker frame fm fb book fbdoc
application/x-mif				mif
application/x-mpegURL				m3u8
application/x-ms-application			application
application/x-ms-manifest			manifest
application/x-ms-wmd				wmd
application/x-ms-wmz				wmz
application/x-msdos-program			com exe bat dll
application/x-msi				msi
application/x-netcdf				nc
application/x-ns-proxy-autoconfig		pac
application/x-nwc				nwc
application/x-object				o
application/x-oz-application			oza
application/x-pkcs7-certreqresp			p7r
application/x-pkcs7-crl				crl
application/x-python-code			pyc pyo
application/x-qgis				qgs shp shx
application/x-quicktimeplayer			qtl
application/x-rdp				rdp
application/x-redhat-package-manager		rpm
application/x-rss+xml				rss
application/x-ruby				rb
application/x-rx
application/x-scilab				sci sce
application/x-scilab-xcos			xcos
application/x-sh				sh
application/x-shar				shar
application/x-shellscript
application/x-shockwave-flash			swf swfl
application/x-silverlight			scr
application/x-sql				sql
application/x-stuffit				sit sitx
application/x-sv4cpio				sv4cpio
application/x-sv4crc				sv4crc
application/x-tar				tar
application/x-tcl				tcl
application/x-tex-gf				gf
application/x-tex-pk				pk
application/x-texinfo				texinfo texi
application/x-trash				~ % bak old sik
application/x-troff				t tr roff
application/x-troff-man				man
application/x-troff-me				me
application/x-troff-ms				ms
application/x-ustar				ustar
application/x-videolan
application/x-wais-source			src
application/x-wingz				wz
application/x-x509-ca-cert			crt
application/x-xcf				xcf
application/x-xfig				fig
application/x-xpinstall				xpi
application/x-xz				xz

audio/32kadpcm
audio/3gpp
audio/amr					amr
audio/amr-wb					awb
audio/annodex					axa
audio/basic					au snd
audio/csound					csd orc sco
audio/flac					flac
audio/g.722.1
audio/l16
audio/midi					mid midi kar
audio/mp4a-latm
audio/mpa-robust
audio/mpeg					mpga mpega mp2 mp3 m4a
audio/mpegurl					m3u
audio/ogg					oga ogg opus spx
audio/parityfec
audio/prs.sid					sid
audio/telephone-event
audio/tone
audio/vnd.cisco.nse
audio/vnd.cns.anp1
audio/vnd.cns.inf1
audio/vnd.digital-winds
audio/vnd.everad.plj
audio/vnd.lucent.voice
audio/vnd.nortel.vbk
audio/vnd.nuera.ecelp4800
audio/vnd.nuera.ecelp7470
audio/vnd.nuera.ecelp9600
audio/vnd.octel.sbc
audio/vnd.qcelp
audio/vnd.rhetorex.32kadpcm
audio/vnd.vmx.cvsd
audio/x-aiff					aif aiff aifc
audio/x-gsm					gsm
audio/x-mpegurl					m3u
audio/x-ms-wma					wma
audio/x-ms-wax					wax
audio/x-pn-realaudio-plugin
audio/x-pn-realaudio				ra rm ram
audio/x-realaudio				ra
audio/x-scpls					pls
audio/x-sd2					sd2
audio/x-wav					wav

chemical/x-alchemy				alc
chemical/x-cache				cac cache
chemical/x-cache-csf				csf
chemical/x-cactvs-binary			cbin cascii ctab
chemical/x-cdx					cdx
chemical/x-cerius				cer
chemical/x-chem3d				c3d
chemical/x-chemdraw				chm
chemical/x-cif					cif
chemical/x-cmdf					cmdf
chemical/x-cml					cml
chemical/x-compass				cpa
chemical/x-crossfire				bsd
chemical/x-csml					csml csm
chemical/x-ctx					ctx
chemical/x-cxf					cxf cef
#chemical/x-daylight-smiles			smi
chemical/x-embl-dl-nucleotide			emb embl
chemical/x-galactic-spc				spc
chemical/x-gamess-input				inp gam gamin
chemical/x-gaussian-checkpoint			fch fchk
chemical/x-gaussian-cube			cub
chemical/x-gaussian-input			gau gjc gjf
chemical/x-gaussian-log				gal
chemical/x-gcg8-sequence			gcg
chemical/x-genbank				gen
chemical/x-hin					hin
chemical/x-isostar				istr ist
chemical/x-jcamp-dx				jdx dx
chemical/x-kinemage				kin
chemical/x-macmolecule				mcm
chemical/x-macromodel-input			mmd mmod
chemical/x-mdl-molfile				mol
chemical/x-mdl-rdfile				rd
chemical/x-mdl-rxnfile				rxn
chemical/x-mdl-sdfile				sd sdf
chemical/x-mdl-tgf				tgf
#chemical/x-mif					mif
chemical/x-mmcif				mcif
chemical/x-mol2					mol2
chemical/x-molconn-Z				b
chemical/x-mopac-graph				gpt
chemical/x-mopac-input				mop mopcrt mpc zmt
chemical/x-mopac-out				moo
chemical/x-mopac-vib				mvb
chemical/x-ncbi-asn1				asn
chemical/x-ncbi-asn1-ascii			prt ent
chemical/x-ncbi-asn1-binary			val aso
chemical/x-ncbi-asn1-spec			asn
chemical/x-pdb					pdb ent
chemical/x-rosdal				ros
chemical/x-swissprot				sw
chemical/x-vamas-iso14976			vms
chemical/x-vmd					vmd
chemical/x-xtel					xtel
chemical/x-xyz					xyz

image/cgm
image/g3fax
image/gif					gif
image/ief					ief
image/jp2					jp2 jpg2
image/jpeg					jpeg jpg jpe
image/jpm					jpm
image/jpx					jpx jpf
image/naplps
image/pcx					pcx
image/png					png
image/prs.btif
image/prs.pti
image/svg+xml					svg svgz
image/tiff					tiff tif
image/vnd.cns.inf2
image/vnd.djvu					djvu djv
image/vnd.dwg
image/vnd.dxf
image/vnd.fastbidsheet
image/vnd.fpx
image/vnd.fst
image/vnd.fujixerox.edmics-mmr
image/vnd.fujixerox.edmics-rlc
image/vnd.microsoft.icon			ico
image/vnd.mix
image/vnd.net-fpx
image/vnd.svf
image/vnd.wap.wbmp				wbmp
image/vnd.xiff
image/x-canon-cr2				cr2
image/x-canon-crw				crw
image/x-cmu-raster				ras
image/x-coreldraw				cdr
image/x-coreldrawpattern			pat
image/x-coreldrawtemplate			cdt
image/x-corelphotopaint				cpt
image/x-epson-erf				erf
image/x-icon
image/x-jg					art
image/x-jng					jng
image/x-ms-bmp					bmp
image/x-nikon-nef				nef
image/x-olympus-orf				orf
image/x-photoshop				psd
image/x-portable-anymap				pnm
image/x-portable-bitmap				pbm
image/x-portable-graymap			pgm
image/x-portable-pixmap				ppm
image/x-rgb					rgb
image/x-xbitmap					xbm
image/x-xpixmap					xpm
image/x-xwindowdump				xwd

inode/chardevice
inode/blockdevice
inode/directory-locked
inode/directory
inode/fifo
inode/socket

message/delivery-status
message/disposition-notification
message/external-body
message/http
message/s-http
message/news
message/partial
message/rfc822					eml

model/iges					igs iges
model/mesh					msh mesh silo
model/vnd.dwf
model/vnd.flatland.3dml
model/vnd.gdl
model/vnd.gs-gdl
model/vnd.gtw
model/vnd.mts
model/vnd.vtu
model/vrml					wrl vrml
model/x3d+vrml					x3dv
model/x3d+xml					x3d
model/x3d+binary				x3db

multipart/alternative
multipart/appledouble
multipart/byteranges
multipart/digest
multipart/encrypted
multipart/form-data
multipart/header-set
multipart/mixed
multipart/parallel
multipart/related
multipart/report
multipart/signed
multipart/voice-message

text/cache-manifest				appcache
text/calendar					ics icz
text/css					css
text/csv					csv
text/directory
text/english
text/enriched
text/h323					323
text/html					html htm shtml
text/iuls					uls
text/mathml					mml
text/markdown                                   md markdown
text/parityfec
text/plain					asc txt text pot brf srt
text/prs.lines.tag
text/rfc822-headers
text/richtext					rtx
text/rtf
text/scriptlet					sct wsc
text/t140
text/texmacs					tm
text/tab-separated-values			tsv
text/turtle					ttl
text/uri-list
text/vcard					vcf vcard
text/vnd.abc
text/vnd.curl
text/vnd.debian.copyright
text/vnd.DMClientScript
text/vnd.flatland.3dml
text/vnd.fly
text/vnd.fmi.flexstor
text/vnd.in3d.3dml
text/vnd.in3d.spot
text/vnd.IPTC.NewsML
text/vnd.IPTC.NITF
text/vnd.latex-z
text/vnd.motorola.reflex
text/vnd.ms-mediapackage
text/vnd.sun.j2me.app-descriptor		jad
text/vnd.wap.si
text/vnd.wap.sl
text/vnd.wap.wml				wml
text/vnd.wap.wmlscript				wmls
text/x-bibtex					bib
text/x-boo					boo
text/x-c++hdr					h++ hpp hxx hh
text/x-c++src					c++ cpp cxx cc
text/x-chdr					h
text/x-component				htc
text/x-crontab
text/x-csh					csh
text/x-csrc					c
text/x-dsrc					d
text/x-diff					diff patch
text/x-haskell					hs
text/x-java					java
text/x-lilypond					ly
text/x-literate-haskell				lhs
text/x-makefile
text/x-moc					moc
text/x-pascal					p pas
text/x-pcs-gcd					gcd
text/x-perl					pl pm
text/x-python					py
text/x-scala					scala
text/x-server-parsed-html
text/x-setext					etx
text/x-sfv					sfv
text/x-sh					sh
text/x-tcl					tcl tk
text/x-tex					tex ltx sty cls
text/x-vcalendar				vcs

video/3gpp					3gp
video/annodex					axv
video/dl					dl
video/dv					dif dv
video/fli					fli
video/gl					gl
video/mpeg					mpeg mpg mpe
video/MP2T					ts
video/mp4					mp4
video/quicktime					qt mov
video/mp4v-es
video/ogg					ogv
video/parityfec
video/pointer
video/webm					webm
video/vnd.fvt
video/vnd.motorola.video
video/vnd.motorola.videop
video/vnd.mpegurl				mxu
video/vnd.mts
video/vnd.nokia.interleaved-multimedia
video/vnd.vivo
video/x-flv					flv
video/x-la-asf					lsf lsx
video/x-mng					mng
video/x-ms-asf					asf asx
video/x-ms-wm					wm
video/x-ms-wmv					wmv
video/x-ms-wmx					wmx
video/x-ms-wvx					wvx
video/x-msvideo					avi
video/x-sgi-movie				movie
video/x-matroska				mpv mkv

x-conference/x-cooltalk				ice

x-epoc/x-sisx-app				sisx
x-world/x-vrml					vrm vrml wrl
`
